package Gui.Modele;

import it.cnr.imaa.essi.lablib.gui.checkboxtree.CheckboxTree;

import java.util.ArrayList;
import java.util.List;

import javax.swing.tree.DefaultMutableTreeNode;
import javax.swing.tree.DefaultTreeModel;
import javax.swing.tree.TreePath;

import PodsumowaniaLingwistyczne.IKwalifikator;
import PodsumowaniaLingwistyczne.IKwalifikatorTypu2;
import PodsumowaniaLingwistyczne.ISumaryzator;
import PodsumowaniaLingwistyczne.ISumaryzatorTypu2;
import PodsumowaniaLingwistyczne.Kwantyfikator;

public class ModelSkladnikowPodsumowania {

	private DefaultMutableTreeNode wezelKwantyfikatorow;
	private DefaultMutableTreeNode wezelKwalifikatorow;
	private DefaultMutableTreeNode wezelSumaryzatorow;
	private DefaultMutableTreeNode korzen;
	private CheckboxTree drzewo;
	
	public ModelSkladnikowPodsumowania() {
		super();
		wezelKwantyfikatorow = new DefaultMutableTreeNode("Kwantyfikatory");
		wezelKwalifikatorow = new DefaultMutableTreeNode("Kwalifikatory");
		wezelSumaryzatorow = new DefaultMutableTreeNode("Sumaryzatory");
		korzen = new DefaultMutableTreeNode("Skladniki podsumowania");
		korzen.add(wezelKwantyfikatorow);
		korzen.add(wezelKwalifikatorow);
		korzen.add(wezelSumaryzatorow);
	}
	
	public CheckboxTree getDrzewo() {
		return drzewo;
	}

	public void setDrzewo(CheckboxTree drzewo) {
		this.drzewo = drzewo;
		DefaultTreeModel model = new DefaultTreeModel(korzen); 
		drzewo.setModel(model);
		odswiez();
	}

	public DefaultMutableTreeNode getKorzen(){
		return korzen;
	}
	
	public void dodajKwantyfikator(Kwantyfikator kwantyfikator){
		wezelKwantyfikatorow.add(new DefaultMutableTreeNode(kwantyfikator));
	}
	
	public void dodajKwalifikator(IKwalifikatorTypu2 kwalifikator){
		wezelKwalifikatorow.add(new DefaultMutableTreeNode(kwalifikator));
	}
	
	public void dodajSumaryzator(ISumaryzatorTypu2 sumaryzator){
		wezelSumaryzatorow.add(new DefaultMutableTreeNode(sumaryzator));
	}
	
	public List<ISumaryzatorTypu2> pobierzZaznaczoneSumaryzatory(){
		List<ISumaryzatorTypu2> listaSumaryzatorow = new ArrayList<ISumaryzatorTypu2>();
		DefaultMutableTreeNode nadWezel = wezelSumaryzatorow;
		int iloscDzieci = nadWezel.getChildCount();
		for (int i = 0; i < iloscDzieci; i++) {
			DefaultMutableTreeNode wezel = (DefaultMutableTreeNode)nadWezel.getChildAt(i);
			TreePath sciezkaWezla = new TreePath(wezel.getPath());
			if(drzewo.isPathChecked(sciezkaWezla)){
				ISumaryzatorTypu2 sumaryzator = (ISumaryzatorTypu2) wezel.getUserObject();
				listaSumaryzatorow.add(sumaryzator);
			}

		}
		return listaSumaryzatorow;
	}
	
	public List<Kwantyfikator> pobierzZaznaczoneKwantyfikatory(){
		List<Kwantyfikator> listaKwantyfikatorow = new ArrayList<Kwantyfikator>();
		DefaultMutableTreeNode nadWezel = wezelKwantyfikatorow;
		int iloscDzieci = nadWezel.getChildCount();
		for (int i = 0; i < iloscDzieci; i++) {
			DefaultMutableTreeNode wezel = (DefaultMutableTreeNode)nadWezel.getChildAt(i);
			TreePath sciezkaWezla = new TreePath(wezel.getPath());
			if(drzewo.isPathChecked(sciezkaWezla)){
				Kwantyfikator kwantyfikator = (Kwantyfikator) wezel.getUserObject();
				listaKwantyfikatorow.add(kwantyfikator);
			}

		}
		return listaKwantyfikatorow;
	}
	
	public List<IKwalifikatorTypu2> pobierzZaznaczoneKwalifikatory(){
		List<IKwalifikatorTypu2> listaKwalifikatorow = new ArrayList<IKwalifikatorTypu2>();
		DefaultMutableTreeNode nadWezel = wezelKwalifikatorow;
		int iloscDzieci = nadWezel.getChildCount();
		for (int i = 0; i < iloscDzieci; i++) {
			DefaultMutableTreeNode wezel = (DefaultMutableTreeNode)nadWezel.getChildAt(i);
			TreePath sciezkaWezla = new TreePath(wezel.getPath());
			if(drzewo.isPathChecked(sciezkaWezla)){
				IKwalifikatorTypu2 kwalifikator = (IKwalifikatorTypu2) wezel.getUserObject();
				listaKwalifikatorow.add(kwalifikator);
			}
		}
		return listaKwalifikatorow;
	}
	
	public void odswiez(){
		((DefaultTreeModel)drzewo.getModel()).reload();
		drzewo.expandAll();
	}
	
	public void wyczysc(){
		wezelKwantyfikatorow.removeAllChildren();
		wezelKwalifikatorow.removeAllChildren();
		wezelSumaryzatorow.removeAllChildren();
		odswiez();
	}
}
